LVS 的 nat 模式

        类似于iptables的DNAT,但支持多目标转发。客户端和realserver不能再同一个网段,不然直接响应,不走网关

1.模块讲解

        客户端发起请求

        nat模式中,vip机器进行ip的转发,只改变目的ip

        res1和res2需要提供web服务(nginx或者httpd都可以)

2.请求流程图

  1. 客户端发起请求到vip机器上,vip服务器根据lvs的算法,转发给realserver服务器(改变目的ip为res1或者res2),并记录连接信息,只改变目的ip,源ip不变。
  2. real-server收到request请求包之后,发现目的ip是自己的ip,处理请求,然后走网关,经过vip
  3. vip收到reply包后,修改reply包的源ip地址为vip,发给客户端
  4. 从客户端来的属于本地连接的包,查hash表,然后转发给real-server
  5. 当client发送完毕以后,此次连接结束或者连接超时,lvs自动从hast表中删除此条记录;

        数据包流程如下:

        1.客户端发起请求:

1
source 192.168.147.1 dest 192.168.147.150:80

        在vip服务器上,eth1网卡上抓包如下:

        2.lvs(vip)处理请求:

        vip服务器上抓包,在eth1网卡:

1
source 192.168.147.1:59334 dst 192.168.1.112/111:80

        3.realserver处理完请求以后,网关是eth0;在vip的eth0上抓包如下

1
source 192.168.1.112 dst 192.168.147.1

        4.包经过eth0返回vip服务器,然后经过eth1返回给客户端,源ip改成vip,目的ip不变,

1
source 192.168.147.150 dst 192.168.147.1

lvs_nat模式部署过程:

  1. (确保所有服务器的iptables selinux都是关闭状态)
  2. 两个realserver上安装nginx或者http提供web服务
  3. vip上安装ipvsadm
  4. 在vip服务器上新建lvs_nat.sh脚本,然后执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#! /bin/bash
# director 服务器上开启路由转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
iptables -F
iptables -t nat -F
iptables -t nat -X
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
ipvsadm -C
ipvsadm -A -t 192.168.147.150:80 -s rr -p 300
#-p 300 长链接300秒
ipvsadm -a -t 192.168.147.150:80 -r 192.168.1.111:80 -m -w 1
ipvsadm -a -t 192.168.147.150:80 -r 192.168.1.112:80 -m -w 1
  1. realserver的网关是eth0,及vip的内网ip

        lvs——nat模式的缺点:当流量比较高时,因为所有的流量进入和出去都要进过lvs,所以瓶颈就在lvs上,而dr模式就比这个效果好很多

待解决问题

        当访问res2的时候,在111上可以抓到112:80到147.1上的包,如下:

        当访问res1时,在111上抓不到112:80到147.1上的包